package com.itxiuyixiu.entity.mapper;

import com.itxiuyixiu.entity.model.Organization;
import com.itxiuyixiu.entity.model.Project;
import com.itxiuyixiu.entity.model.ProjectView;

import java.util.List;
import java.util.Optional;

/**
 * @author 黄磊
 * @date 2020/5/2
 */
public interface ProjectReaderMapper {
    /**
     * 根据项目id查找
     *
     * @param projectId 项目id
     * @return 项目信息
     */
    Optional<Project> findProjectByProjectId(Integer projectId);

    /**
     * 根据志愿者组织id查找
     *
     * @param organizationId 志愿者组织id
     * @return 志愿者组织信息
     */
    List<Project> findAllProjectByOrganizationId(Integer organizationId);

    /**
     * 根据管理员id查找
     *
     * @param adminId 管理员id
     * @return 志愿者组织信息
     */
    List<Project> findAllProjectByAdminId(Integer adminId);

    /**
     * 根据管理员的用户名查找
     *
     * @param username 用户名
     * @return 志愿者组织信息
     */
    List<Project> findAllProjectByAdminUsername(String username);


    /**
     * 视图
     * 根据项目id查找
     *
     * @param OrgId 组织id projectId 项目id
     * @return 项目信息
     */
    Optional<ProjectView> findProjectViewByOrgIdAndProjectId(Integer OrgId,Integer projectId);

    /**
     * 根据项目id查找视图
     *
     * @param projectId 项目id
     * @return 项目信息
     */
    Optional<ProjectView> findProjectViewByProjectId(Integer projectId);

    /**
     * 根据志愿者组织id查找视图
     *
     * @param organizationId 志愿者组织id
     * @return 志愿者组织包含的项目信息
     */
    List<ProjectView> findAllProjectViewByOrganizationId(Integer organizationId);
    /**
     * 查找所有项目视图
     *
     * @return 项目信息
     */
    List<ProjectView> findAllProjectView();

    /**
     * 查询某一志愿者项目信息与其所属的志愿者组织信息
     *
     * @param projectId 项目id
     * @return 志愿者项目信息与其所属的志愿者组织信息
     */
    Optional<Project> findProjectWithOrganizationByProjectId(Integer projectId);

    /**
     * 查询某一志愿者项目信息与其所属的志愿者组织信息和项目下的所有活动信息
     *
     * @param projectId 项目id
     * @return 志愿者项目信息与其所属的志愿者组织信息和项目下的所有活动信息
     */
    Optional<Project> findProjectWithOrganizationAndActivityByProjectId(Integer projectId);
}
